package com.sun.umbrella.dao;

import com.sun.umbrella.domain.bo.ResInfoBO;
import com.sun.umbrella.domain.entity.ResInfoDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @description: 资源信息持久化mapper接口
 * @author: Jay
 * @date: 2018-04-09
 * @version: V1.0
 */
@Repository
public interface ResInfoMapper {

    /**
     * 更新左右值数据（添加节点时）
     *
     * @param sysId
     * @param updateNum 插入节点后其余节点左值需要+2的起始值
     */
    void updateLeftNodeAdd2(@Param(value = "updateNum") Integer updateNum, @Param("sysId") Integer sysId);

    /**
     * 更新左右值数据（添加节点时）右节点+2
     *
     * @param sysId
     * @param updateNum 插入节点后其余节点右值需要+2的起始值
     */
    void updateRightNodeAdd2(@Param(value = "updateNum") Integer updateNum, @Param("sysId") Integer sysId);

    /**
     * 插入新节点
     *
     * @param resInfoDO
     * @return
     */
    Integer insertSelective(ResInfoDO resInfoDO);


    /**
     * 根据id更新资源
     *
     * @param resInfoDO
     * @return
     */
    Integer updateResInfoSelective(ResInfoDO resInfoDO);

    /**
     * 根据资源名称条件查出资源信息列表
     *
     * @param sysId
     * @param resName
     * @return
     */
    List<ResInfoBO> queryResourceInfoList(@Param("resName") String resName, @Param("sysId") Integer sysId);


    /**
     * 根据fatherId和sysId条件查出资源信息列表,根据idx_num从小到大排序
     *
     * @param sysId
     * @param fatherId
     * @return
     */
    List<ResInfoBO> queryResourceInfoListByFatherId(@Param("fatherId") Integer fatherId, @Param("sysId") Integer sysId);


    /**
     * 根据id获取资源信息
     *
     * @param sysId
     * @param id
     * @return
     */
    ResInfoBO getResourceById(@Param("id") Integer id, @Param("sysId") Integer sysId);

    /**
     * 根据左右值阈值查询节点
     *
     * @param sysId
     * @param lB
     * @param rB
     * @return
     */
    List<ResInfoBO> selectNodeByRange(@Param("sysId") Integer sysId, @Param("lB") Integer lB, @Param("rB") Integer rB);

    /**
     * 根据id和sysId更新左右值
     *
     * @param resInfoBO
     * @return
     */
    Integer updateResLftAndRgt(ResInfoBO resInfoBO);


    /**
     * 删除节点的时候左值-2
     *
     * @param sysId
     * @param updateNum
     * @return
     */
    Integer updateLeftNodeWhenDel(@Param("updateNum") Integer updateNum, @Param("sysId") Integer sysId);

    /**
     * 删除节点的时候右值-2
     *
     * @param sysId
     * @param updateNum
     * @return
     */
    Integer updateRgtNodeWhenDel(@Param("updateNum") Integer updateNum, @Param("sysId") Integer sysId);


    /**
     * 根据id删除节点
     *
     * @param sysId
     * @param id
     * @return
     */
    Integer updateIsDeletedById(@Param("id") Integer id, @Param("sysId") Integer sysId);


    /**
     * 根据id集合和sysId查询记录
     *
     * @param idList
     * @param sysId
     * @return
     */
    List<ResInfoDO> queryResourceInfoListByIdList(@Param("idList") List<Integer> idList, @Param("sysId") Integer sysId);
}